home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / asm68k.arc / INHEX.FOR < prev    next >
Text File  |  1985-11-09  |  3KB  |  111 lines

  1. c
  2. CC      Written by:
  3. c               Julian Henry
  4. c               TriSoft
  5. c               4102 Avenue G
  6. c               Austin, Texas  78751
  7. c
  8. c
  9. c       INHEX converts ASM68K object files to INTEL.HEX format
  10. c
  11. c
  12.         implicit integer(a-z)
  13.         integer*2 temval,cc
  14.         byte tval(2),bval(19),chksum(2)
  15.         character*36 fname
  16.         character*1 buf(80),space,zero
  17.         equivalence (cc,chksum(1)),(temval,tval(1))
  18.         data space/' '/
  19.         data zero/'0'/
  20. 1000    type 1010
  21. 1010    format(' Input file spec: ',$)
  22.         accept 1005,fname
  23. 1005    format(a36)
  24.         open(unit=7,name=fname,err=1015,type='old',
  25.      *  carriagecontrol='list',readonly,dispose='save')
  26.         go to 1020
  27. 1015    type 1017
  28. 1017    format(//,' **ERROR** Bad file spec, try again.')
  29.         go to 1000
  30. 1020    type 1030
  31. 1030    format(' Output file spec: ',$)
  32.         accept 1005,fname
  33.         open(unit=8,name=fname,err=1035,type='new',
  34.      *  carriagecontrol='list',dispose='save')
  35.         go to 1040
  36. 1035    type 1017
  37.         go to 1020
  38. 1040    open(unit=9,name='INHEX.ERR',type='new',
  39.      *  carriagecontrol='list',dispose='save')
  40.         errcnt=0
  41.         open(unit=10,name='temp.dat',type='new',dispose='delete')
  42. c
  43. c       read input record
  44. c
  45. 10      read(7,20,end=900)buf
  46. 20      format(80a1)
  47. c
  48. c       crack buf into byte values
  49. c
  50.         decode(80,30,buf)bval
  51. 30      format(1x,3z2,8(1x,2z2))
  52. c       type 30,bval
  53. c
  54. c       check if address is outside 64K range
  55. c
  56.         if(bval(1).eq.0)go to 50
  57.         write(9,20)buf
  58.         errcnt=errcnt+1
  59.         go to 10
  60. c
  61. c       compute byte count
  62. c
  63. 50      bytcnt=0
  64.         do 55 i=9,44,5
  65.           if(buf(i).eq.space)go to 60
  66.           bytcnt=bytcnt+2
  67. 55      continue
  68. c
  69. c       compute checksum
  70. c
  71. 60      cc=0
  72.         do 65 i=2,19
  73.           tval(2)=0
  74.           tval(1)=bval(i)
  75.           cc=cc+temval
  76. 65      continue
  77.         cc=cc+bytcnt
  78. c
  79. c       output record
  80. c
  81.         write(10,70)bytcnt,(bval(i),i=2,bytcnt+3),-chksum(1)
  82. 70      format(':',3z2,'00',17z2)
  83.         go to 10
  84. c
  85. c       EOF, output EOF card
  86. c
  87. 900     rewind 10
  88. 901     read(10,20,end=909)buf
  89.         do 902 i=80,1,-1
  90.           if(buf(i).ne.space)go to 903
  91. 902     continue
  92. 903     do 904 j=i,1,-1
  93.           if(buf(j).eq.space)buf(j)=zero
  94. 904     continue
  95.         write(8,20)(buf(j),j=1,i)
  96.         go to 901
  97. 909     write(8,910)
  98. 910     format(':0000000000')
  99.         if(errcnt.eq.0)go to 920
  100.         close(unit=9,dispose='save')
  101.         type 925
  102. 925     format(//,'     Errors detected, see INHEX.ERR')
  103.         go to 930
  104. 920     close(unit=9,dispose='delete')
  105.         type 928
  106. 928     format(//,'     No Errors detected, conversion completed.')
  107. 930     close(unit=7,dispose='save')
  108.         close(unit=8,dispose='save')
  109.         close(unit=10,dispose='delete')
  110.         end
  111.